home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 90 / CD Actual 90.iso / Software3D / K-3D / k3d-0.4.2.1 / shaders / k3d_slideprojector.sl < prev    next >
Encoding:
Text File  |  2004-07-23  |  1.3 KB  |  53 lines

  1. light k3d_slideprojector(float intensity = 2000;
  2.              color lightcolor = 1;
  3.              point from = point(0, 0, 0);
  4.              point to = point(0, 0, 1);
  5.              point up = point(0, 1, 0); float coneangle = 45;
  6.              float conedeltaangle = 5; float beamdistribution = 2;
  7.              string slidename = "")
  8. {
  9.   uniform vector Z = normalize(to - from);
  10.   uniform vector X = Z ^ up;
  11.   uniform vector Y = normalize(X ^ Z);
  12.   X = normalize(Y ^ Z);
  13.  
  14.   uniform float rconeangle = radians(coneangle) * 0.5;
  15.   uniform float rconedeltaangle = radians(conedeltaangle);
  16.   uniform float spread = 1 / tan(rconeangle);
  17.  
  18.   float attenuation, cosangle;
  19.   float Pt, Pu, Pv, sloc, tloc;
  20.  
  21.   color Ct;
  22.  
  23.   illuminate(from, Z, rconeangle)
  24.   {
  25.     L = Ps - from;
  26.     Pt = L.Z;
  27.     Pu = L.X;
  28.     Pv = L.Y;
  29.  
  30.     sloc = spread * Pu / Pt;
  31.     tloc = spread * Pv / Pt;
  32.     sloc = sloc * .5 + .5;
  33.     tloc = tloc * -.5 + .5;
  34.  
  35.     cosangle = (L.Z) / length(L);
  36.     attenuation = pow(cosangle, beamdistribution) / (L.L);
  37.     attenuation *=
  38.       smoothstep(cos(rconeangle), cos(rconeangle - rconedeltaangle),
  39.          cosangle);
  40.  
  41.     if(slidename == "")
  42.       {
  43.     Ct = 0.0;
  44.       }
  45.     else
  46.       {
  47.     Ct = color texture(slidename, sloc, tloc);
  48.       }
  49.  
  50.     Cl = attenuation * intensity * lightcolor * Ct;
  51.   }
  52. }
  53.